home *** CD-ROM | disk | FTP | other *** search
/ Tricks of the Mac Game Programming Gurus / TricksOfTheMacGameProgrammingGurus.iso / More Source / Pascal / SWar / Debris.p next >
Text File  |  1995-06-15  |  3KB  |  105 lines

  1. unit Debris;
  2.  
  3. interface
  4.  
  5.     uses
  6. {$IFC UNDEFINED THINK_PASCAL}
  7.         Types, QuickDraw, Events, Menus, Dialogs, Fonts, Resources, Devices,
  8. {$ENDC}
  9.         Globals, Util;
  10.  
  11.     procedure InitDebris;
  12.     procedure CreateDebris (number, tics, h, v, hv, vv: Integer);
  13.     procedure MoveDebris;
  14.     procedure DrawDebris;
  15.  
  16. implementation
  17.  
  18.     procedure InitDebris;
  19.     {evar DEBRISREC        gDebrisRecs[MAX_DEBRIS], gOldDebrisRecs[MAX_DEBRIS]:xtern;}
  20.         var
  21.             i: Integer;
  22.     begin
  23.  
  24.         for i := 0 to MAX_DEBRIS - 1 do
  25.             begin
  26.                 gDebrisRecs[i].where.v := -1;
  27.                 gDebrisRecs[i].where.h := -1;
  28.                 gDebrisRecs[i].vel.v := -1;
  29.                 gDebrisRecs[i].vel.h := -1;
  30.                 gDebrisRecs[i].countdown := 0;
  31.             end; (* for *)
  32.  
  33.     end; (* InitDebris() *)
  34.  
  35.     procedure CreateDebris (number, tics, h, v, hv, vv: Integer);
  36.         var
  37.             i: Integer;
  38.     begin
  39.         for i := 0 to MAX_DEBRIS - 1 do
  40.             if (gDebrisRecs[i].countdown = 0) then
  41.                 begin
  42.                     gDebrisRecs[i].where.v := v + RngRnd(-3, 3);
  43.                     gDebrisRecs[i].where.h := h + RngRnd(-3, 3);
  44.                     gDebrisRecs[i].vel.v := vv + RngRnd(-3, 3);
  45.                     gDebrisRecs[i].vel.h := hv + RngRnd(-3, 3);
  46.                     gDebrisRecs[i].countdown := tics;
  47.                     gDebrisRecs[i].color.red := RngRnd(0, 256) * 256;
  48.                     gDebrisRecs[i].color.green := RngRnd(0, 256) * 256;
  49.                     gDebrisRecs[i].color.blue := RngRnd(0, 256) * 256;
  50.                     number := number - 1;
  51.                     if number = 0 then
  52.                         exit(CreateDebris);
  53.                 end; (* if *)
  54.  
  55.     end; (* CreateDebris() *)
  56.  
  57.     procedure MoveDebris;
  58.         var
  59.             i: Integer;
  60.     begin
  61.         for i := 0 to MAX_DEBRIS - 1 do
  62.             if gDebrisRecs[i].countdown <> 0 then
  63.                 begin
  64.                     gDebrisRecs[i].countdown := gDebrisRecs[i].countdown - 1;
  65.                     gDebrisRecs[i].where.h := gDebrisRecs[i].where.h + gDebrisRecs[i].vel.h;
  66.                     gDebrisRecs[i].where.v := gDebrisRecs[i].where.v + gDebrisRecs[i].vel.v;
  67.                     if (gDebrisRecs[i].where.v < 0) then
  68.                         gDebrisRecs[i].vel.v := -gDebrisRecs[i].vel.v;
  69.                     if (gDebrisRecs[i].where.v > 479) then
  70.                         gDebrisRecs[i].vel.v := -gDebrisRecs[i].vel.v;
  71.                     if (gDebrisRecs[i].where.h < 0) then
  72.                         gDebrisRecs[i].vel.h := -gDebrisRecs[i].vel.h;
  73.                     if (gDebrisRecs[i].where.h > 639) then
  74.                         gDebrisRecs[i].vel.h := -gDebrisRecs[i].vel.h;
  75.                 end; (* if *)
  76.  
  77.     end; (* MoveDebris() *)
  78.  
  79.     procedure DrawDebris;
  80.         var
  81.             hloc: Integer;
  82.             i: Integer;
  83.             savePort: GrafPtr;
  84. {     extern     gXv:Integer;}
  85. {    eCGrafPort    *gOSPtr:xtern;}
  86. {    eRGBColor    myBlack:xtern; }
  87.     begin
  88.         GetPort(savePort);
  89.         SetPort(GrafPtr(gOSPtr));
  90.         for i := 0 to MAX_DEBRIS - 1 do
  91.             begin
  92.                 if gOldDebrisRecs[i].countdown <> 0 then
  93.                     SetCPixel(gOldDebrisRecs[i].where.h, gOldDebrisRecs[i].where.v, myBlack);
  94.                 if gDebrisRecs[i].countdown <> 0 then
  95.                     SetCPixel(gDebrisRecs[i].where.h, gDebrisRecs[i].where.v, gDebrisRecs[i].color);
  96.                 gOldDebrisRecs[i] := gDebrisRecs[i];
  97.             end; (* for *)
  98.         SetPort(savePort);
  99.  
  100.     end; (* DrawDebris() *)
  101.  
  102. end.
  103.  
  104.  
  105.